<?php namespace App\Providers;

use App\Repositories\Eloquent\Item\CompanyRepository;
use App\Repositories\Eloquent\Item\ItemRepository;
use App\Repositories\Eloquent\Item\ProjectRepository;
use App\Repositories\Eloquent\Money\BalanceRepository;
use App\Repositories\Eloquent\Money\MoneyRepository;
use App\Repositories\Eloquent\Order\OrderRepository;
use App\Repositories\Eloquent\Tag\TagRepository;
use App\Repositories\Eloquent\User\PublisherRepository;
use App\Repositories\Eloquent\User\SocialiteUserRepository;
use App\Repositories\Eloquent\User\UserLoginCodeRepository;
use App\Repositories\Eloquent\User\UserRepository;
use App\Repositories\Eloquent\User\UserTokenRepository;
use App\Repositories\Item\CompanyRepositoryInterface;
use App\Repositories\Item\ItemRepositoryInterface;
use App\Repositories\Item\ProjectRepositoryInterface;
use App\Repositories\Money\BalanceRepositoryInterface;
use App\Repositories\Money\MoneyRepositoryInterface;
use App\Repositories\Order\OrderRepositoryInterface;
use App\Repositories\Tag\TagRepositoryInterface;
use App\Repositories\User\PublisherRepositoryInterface;
use App\Repositories\User\SocialiteUserRepositoryInterface;
use App\Repositories\User\UserLoginCodeRepositoryInterface;
use App\Repositories\User\UserRepositoryInterface;
use App\Repositories\User\UserTokenRepositoryInterface;
use Illuminate\Support\ServiceProvider;

class RepositoryServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind(
            UserRepositoryInterface::class,
            UserRepository::class
        );

        $this->app->bind(
            SocialiteUserRepositoryInterface::class,
            SocialiteUserRepository::class
        );

        $this->app->bind(
            PublisherRepositoryInterface::class,
            PublisherRepository::class
        );

        $this->app->bind(
            UserTokenRepositoryInterface::class,
            UserTokenRepository::class
        );

        $this->app->bind(
            UserLoginCodeRepositoryInterface::class,
            UserLoginCodeRepository::class
        );

        $this->app->bind(
            ItemRepositoryInterface::class,
            ItemRepository::class
        );

        $this->app->bind(
            ProjectRepositoryInterface::class,
            ProjectRepository::class
        );

        $this->app->bind(
            CompanyRepositoryInterface::class,
            CompanyRepository::class
        );

        $this->app->bind(
            OrderRepositoryInterface::class,
            OrderRepository::class
        );

        $this->app->bind(
            TagRepositoryInterface::class,
            TagRepository::class
        );

        $this->app->bind(
            MoneyRepositoryInterface::class,
            MoneyRepository::class
        );

        $this->app->bind(
            BalanceRepositoryInterface::class,
            BalanceRepository::class
        );
    }
}
